package main

import "fmt"

/**
	函数是值传递的，在函数内部会对实参创建一个副本
	但是如果实参是一个：切片、字典、函数、指针、通道 那么函数使用实参时就可以改变实参的值
 */

//实参：int
func f1(a int)  {
	a = 10
}

//实参：数组[2]int
func f2(a [2]int)  {
	a[0] = 10
}

//实参: 切片[]int
func f3(a []int)  {
	a[0] = 10
}



func main() {
	a := 9
	f1(a)
	fmt.Println(a)  	//还是9

	arr := [...]int{1,2}
	f2(arr)
	fmt.Println(arr)	//还是1，2

	slice := []int{1,2}
	f3(slice)
	fmt.Println(slice)  //值被改变了
}